home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2007 December / PCWKCD1207B.iso / Blogowanie poza sfera / Flock 1.0 beta / flock-1.0RC3.en-US.win32.exe / flock / components / nsKillAll.js < prev    next >
Text File  |  2007-10-18  |  8KB  |  201 lines

  1. /* ***** BEGIN LICENSE BLOCK *****
  2.  * Version: MPL 1.1/GPL 2.0/LGPL 2.1
  3.  *
  4.  * The contents of this file are subject to the Mozilla Public License Version
  5.  * 1.1 (the "License"); you may not use this file except in compliance with
  6.  * the License. You may obtain a copy of the License at
  7.  * http://www.mozilla.org/MPL/
  8.  *
  9.  * Software distributed under the License is distributed on an "AS IS" basis,
  10.  * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
  11.  * for the specific language governing rights and limitations under the
  12.  * License.
  13.  *
  14.  * The Original Code is Mozilla Kill All.
  15.  *
  16.  * The Initial Developer of the Original Code is
  17.  * Netscape Communications Corp.
  18.  * Portions created by the Initial Developer are Copyright (C) 2002
  19.  * the Initial Developer. All Rights Reserved.
  20.  *
  21.  * Contributor(s):
  22.  *   Bill Law  <law@netscape.com>
  23.  *
  24.  * Alternatively, the contents of this file may be used under the terms of
  25.  * either the GNU General Public License Version 2 or later (the "GPL"), or
  26.  * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
  27.  * in which case the provisions of the GPL or the LGPL are applicable instead
  28.  * of those above. If you wish to allow use of your version of this file only
  29.  * under the terms of either the GPL or the LGPL, and not to allow others to
  30.  * use your version of this file under the terms of the MPL, indicate your
  31.  * decision by deleting the provisions above and replace them with the notice
  32.  * and other provisions required by the GPL or the LGPL. If you do not delete
  33.  * the provisions above, a recipient may use your version of this file under
  34.  * the terms of any one of the MPL, the GPL or the LGPL.
  35.  *
  36.  * ***** END LICENSE BLOCK ***** */
  37.  
  38. /* This file implements the nsICmdLineHandler interface.  See nsICmdLineHandler.idl
  39.  * at http://lxr.mozilla.org/seamonkey/source/xpfe/appshell/public/nsICmdLineHandler.idl.
  40.  *
  41.  * This component handles the startup command line argument of the form:
  42.  *   -killAll
  43.  * by closing all windows and shutting down turbo mode.
  44.  *
  45.  * The module is registered under the contractid
  46.  *   "@mozilla.org/commandlinehandler/general-startup;1?type=killAll"
  47.  *
  48.  * The implementation consists of a JavaScript "class" named nsKillAll,
  49.  * comprised of:
  50.  *   - a JS constructor function
  51.  *   - a prototype providing all the interface methods and implementation stuff
  52.  *
  53.  * In addition, this file implements an nsIModule object that registers the
  54.  * nsKillAll component.
  55.  */
  56.  
  57. /* ctor
  58.  */
  59. function nsKillAll() {
  60. }
  61.  
  62. nsKillAll.prototype = {
  63.  
  64.     // nsICmdLineHandler interface
  65.     get commandLineArgument() { throw Components.results.NS_ERROR_NOT_IMPLEMENTED; },
  66.     get prefNameForStartup()  { throw Components.results.NS_ERROR_NOT_IMPLEMENTED; },
  67.  
  68.     get chromeUrlForTask()    {
  69.  
  70.       // turn off server mode
  71.  
  72.       var wasMozillaAlreadyRunning = false;
  73.       var appStartup = Components.classes["@mozilla.org/toolkit/app-startup;1"]
  74.                          .getService(Components.interfaces.nsIAppStartup);
  75.       var nativeAppSupport = {isServerMode: false};
  76.       try {
  77.         nativeAppSupport = appStartup.nativeAppSupport;
  78.       } catch ( ex ) {
  79.       }
  80.  
  81.       var originalServerMode = false;
  82.       if (nativeAppSupport.isServerMode) {
  83.         originalServerMode = true;
  84.         wasMozillaAlreadyRunning = true;
  85.         nativeAppSupport.isServerMode = false;
  86.       }
  87.  
  88.       // stop all applications
  89.  
  90.       var gObserverService = Components.classes["@mozilla.org/observer-service;1"]
  91.                              .getService(Components.interfaces.nsIObserverService);
  92.       if (gObserverService) {
  93.         try {
  94.           gObserverService.notifyObservers(null, "quit-application", null);
  95.         } catch (ex) {
  96.           // dump("no observer found \n");
  97.         }
  98.       }
  99.  
  100.       // close down all windows
  101.  
  102.       var windowManager =
  103.         Components.classes['@mozilla.org/appshell/window-mediator;1']
  104.         .getService(Components.interfaces.nsIWindowMediator);
  105.       var enumerator = windowManager.getEnumerator(null);
  106.       while(enumerator.hasMoreElements()) {
  107.         wasMozillaAlreadyRunning = true;
  108.         var domWindow = enumerator.getNext();
  109.         if (("tryToClose" in domWindow) && !domWindow.tryToClose()) {
  110.           // user pressed cancel in response to dialog for closing an unsaved window
  111.           nativeAppSupport.isServerMode = originalServerMode
  112.           // Return NS_ERROR_ABORT to inform caller of the "cancel."
  113.           throw Components.results.NS_ERROR_ABORT;
  114.         }
  115.         domWindow.close();
  116.       }
  117.  
  118.       // exit without opening a new window
  119.  
  120.       if (wasMozillaAlreadyRunning) {
  121.         // Need to exit appshell in this case.
  122.         appStartup.quit(Components.interfaces.nsIAppStartup.eAttemptQuit);
  123.       }
  124.  
  125.       // We throw NS_ERROR_NOT_AVAILABLE which will be interpreted by the caller
  126.       // to mean that the command line handler is indicating that this should be a
  127.       // silent command and not cause any windows to open.
  128.       throw Components.results.NS_ERROR_NOT_AVAILABLE;
  129.     },
  130.  
  131.     get helpText()            { throw Components.results.NS_ERROR_NOT_IMPLEMENTED; },
  132.     get handlesArgs()         { throw Components.results.NS_ERROR_NOT_IMPLEMENTED; },
  133.     get defaultArgs()         { throw Components.results.NS_ERROR_NOT_IMPLEMENTED; },
  134.     get openWindowWithArgs()  { throw Components.results.NS_ERROR_NOT_IMPLEMENTED; },
  135.  
  136.     // nsISupports interface
  137.  
  138.     // This "class" supports nsICmdLineHandler and nsISupports.
  139.     QueryInterface: function (iid) {
  140.         if (iid.equals(Components.interfaces.nsICmdLineHandler) ||
  141.             iid.equals(Components.interfaces.nsISupports))
  142.             return this;
  143.  
  144.         Components.returnCode = Components.results.NS_ERROR_NO_INTERFACE;
  145.         return null;
  146.     },
  147.  
  148.     // This Component's module implementation.  All the code below is used to get this
  149.     // component registered and accessible via XPCOM.
  150.     module: {
  151.         // registerSelf: Register this component.
  152.         registerSelf: function (compMgr, fileSpec, location, type) {
  153.             var compReg = compMgr.QueryInterface( Components.interfaces.nsIComponentRegistrar );
  154.             compReg.registerFactoryLocation( this.cid,
  155.                                              "Kill All Component",
  156.                                              this.contractId,
  157.                                              fileSpec,
  158.                                              location,
  159.                                              type );
  160.         },
  161.  
  162.         // getClassObject: Return this component's factory object.
  163.         getClassObject: function (compMgr, cid, iid) {
  164.             if (!cid.equals(this.cid))
  165.                 throw Components.results.NS_ERROR_NO_INTERFACE;
  166.  
  167.             if (!iid.equals(Components.interfaces.nsIFactory))
  168.                 throw Components.results.NS_ERROR_NOT_IMPLEMENTED;
  169.  
  170.             return this.factory;
  171.         },
  172.  
  173.         /* CID for this class */
  174.         cid: Components.ID("{F1F25940-4C8F-11d6-A651-0010A401EB10}"),
  175.  
  176.         /* Contract ID for this class */
  177.         contractId: "@mozilla.org/commandlinehandler/general-startup;1?type=killAll",
  178.  
  179.         /* factory object */
  180.         factory: {
  181.             // createInstance: Return a new nsKillAll object.
  182.             createInstance: function (outer, iid) {
  183.                 if (outer != null)
  184.                     throw Components.results.NS_ERROR_NO_AGGREGATION;
  185.  
  186.                 return (new nsKillAll()).QueryInterface(iid);
  187.             }
  188.         },
  189.  
  190.         // canUnload: n/a (returns true)
  191.         canUnload: function(compMgr) {
  192.             return true;
  193.         }
  194.     }
  195. }
  196.  
  197. // NSGetModule: Return the nsIModule object.
  198. function NSGetModule(compMgr, fileSpec) {
  199.     return nsKillAll.prototype.module;
  200. }
  201.